using System;
using System.Collections.Generic;
using SIP.PN.FrontEnd.Code;
using SIP.PN.Servicios.Interfaces.DTO;

namespace SIP.PN.FrontEnd.controles
{
    public partial class CrudOperarioEspecialidad : ControlAbstracto
    {
        #region Propiedades

        private Acciones Accion
        {
            get { return (Acciones)ViewState["Accion"]; }
            set { ViewState["Accion"] = value; }
        }

        private string CodigoTipoDeDocumento
        {
            get { return (string)ViewState["CodigoTipoDeDocumento"]; }
            set { ViewState["CodigoTipoDeDocumento"] = value; }
        }

        private string NumeroDeDocumento
        {
            get { return (string)ViewState["NumeroDeDocumento"]; }
            set { ViewState["NumeroDeDocumento"] = value; }
        }

        private string CodigoEspecialidad
        {
            get { return (string)ViewState["CodigoEspecialidad"]; }
            set { ViewState["CodigoEspecialidad"] = value; }
        }

        private string CodigoNivel
        {
            get { return (string)ViewState["CodigoNivel"]; }
            set { ViewState["CodigoNivel"] = value; }
        }
        
        #endregion

        #region Metodos Privados

        private void Guardar()
        {
            switch (Accion)
            {
                case Acciones.Nuevo:
                    SrvOperario.AgregarOperarioEspecialidad(CodigoTipoDeDocumento, NumeroDeDocumento, ddl_especialidad.SelectedValue, ddl_nivel.SelectedValue);
                    break;
                case Acciones.Editar:
                    SrvOperario.ModificarOperarioEspecialidad(CodigoTipoDeDocumento, NumeroDeDocumento, ddl_especialidad.SelectedValue, ddl_nivel.SelectedValue, ddl_activo.SelectedValue == "S");
                    break;
            }
            Ocultar();
        }

        #endregion

        #region Metodos Publicos

        public void Inicializar(Acciones accion, string codigoTipoDeDocumento, string numeroDeDocumento)
        {
            Inicializar(accion, codigoTipoDeDocumento, numeroDeDocumento, string.Empty, string.Empty);
        }

        public void Inicializar(Acciones accion, string codigoTipoDeDocumento, string numeroDeDocumento, string codigoEspecialidad, string codigoNivel)
        {
            Accion = accion;
            CodigoTipoDeDocumento = codigoTipoDeDocumento;
            NumeroDeDocumento = numeroDeDocumento;
            CodigoEspecialidad = codigoEspecialidad;
            CodigoNivel = codigoNivel;
            
            OperarioEspecialidadDTO entidad = null;
            switch (Accion)
            {
                case Acciones.Nuevo:
                    lbl_titulo.Text = "Agregar Especialidad";
                    break;
                case Acciones.Visualizar:
                    lbl_titulo.Text = "Visualizar Especialidad";
                    entidad = SrvOperario.ObtenerOperarioEspecialidad(CodigoTipoDeDocumento, NumeroDeDocumento, CodigoEspecialidad, CodigoNivel);
                    break;
                case Acciones.Editar:
                    lbl_titulo.Text = "Editar Especialidad";
                    entidad = SrvOperario.ObtenerOperarioEspecialidad(CodigoTipoDeDocumento, NumeroDeDocumento, CodigoEspecialidad, CodigoNivel);
                    break;
            }
            ResetearFormulario();
            Seguridad();
            CargarFormulario(entidad);
        }

        public override void Seguridad()
        {
            btn_Aceptar.Visible = true;
            btn_Cancelar.Visible = true;
            switch (Accion)
            {
                case Acciones.Nuevo:
                    ddl_activo.Enabled = false;
                    break;
                case Acciones.Visualizar:
                    ddl_especialidad.Enabled = false;
                    ddl_nivel.Enabled = false;
                    ddl_activo.Enabled = false;
                    btn_Aceptar.Visible = false;
                    break;
                case Acciones.Editar:
                    ddl_especialidad.Enabled = false;
                    ddl_nivel.Enabled = false;
                    cva_codigo.Enabled = false;
                    break;
            }
        }

        public void ResetearFormulario()
        {
            ddl_especialidad.Enabled = true;
            ddl_nivel.Enabled = true;
            ddl_activo.Enabled = true;
            ddl_especialidad.Items.Clear();
            ddl_nivel.Items.Clear();
            ddl_activo.SelectedIndex = 0;
        }

        public void CargarFormulario(OperarioEspecialidadDTO entidad)
        {
            IList<EspecialidadDTO> especialidades = SrvAplicacion.ListarEspecialidad(string.Empty);
            Utilidades.BindearComboBox(ddl_especialidad, especialidades, "Nombre", "Codigo", false);

            IList<NivelEspecialidadDTO> niveles = SrvAplicacion.ListarNivelEspecialidad(string.Empty);
            Utilidades.BindearComboBox(ddl_nivel, niveles, "Nombre", "Codigo", false);

            if (entidad != null)
            {
                ddl_especialidad.SelectedValue = entidad.CodigoEspecialidad;
                ddl_nivel.SelectedValue = entidad.CodigoNivelEspecialidad;
                ddl_activo.SelectedValue = entidad.Activo?"S":"N";
            }

            up_CrudOperarioEspecialidad.Update();
        }

        public void Mostrar()
        {
            mpe_CrudOperarioEspecialidad.Show();
        }

        public void Ocultar()
        {
            mpe_CrudOperarioEspecialidad.Hide();
        }

        #endregion

        #region Eventos

        private event EventHandler<EventArgs> aceptar;
        public event EventHandler<EventArgs> Aceptar
        {
            add { aceptar += value; }
            remove { aceptar -= value; }
        }

        private event EventHandler<EventArgs> cancelar;
        public event EventHandler<EventArgs> Cancelar
        {
            add { cancelar += value; }
            remove { cancelar -= value; }
        }

        protected void btn_Cancelar_Click(object sender, EventArgs e)
        {
            Ocultar();
            if (cancelar!=null)
                cancelar(this, new EventArgs());
        }

        protected void btn_Aceptar_Click(object sender, EventArgs e)
        {
            Guardar();
            if (aceptar != null)
                aceptar(this, new EventArgs());
        }

        #endregion
    }
}